package main

import (
	"github.com/mark3labs/mcp-go/mcp"
	"github.com/mark3labs/mcp-go/server"
)

// RegisterTools 注册所有 K8s 工具
func (k *K8sMCPServer) RegisterTools(s *server.MCPServer) {
	// 获取集群信息
	s.AddTool(
		mcp.NewTool("k8s_get_cluster_info",
			mcp.WithDescription("获取 Kubernetes 集群信息"),
		),
		k.handleGetClusterInfo,
	)

	// 获取节点信息
	s.AddTool(
		mcp.NewTool("k8s_get_nodes",
			mcp.WithDescription("获取 Kubernetes 节点信息"),
			mcp.WithString("output_format",
				mcp.Description("输出格式（可选，默认为wide）"),
			),
		),
		k.handleGetNodes,
	)

	// 获取 Pod 信息
	s.AddTool(
		mcp.NewTool("k8s_get_pods",
			mcp.WithDescription("获取 Pod 信息"),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
			mcp.WithString("output_format",
				mcp.Description("输出格式（可选，默认为wide）"),
			),
			mcp.WithString("selector",
				mcp.Description("标签选择器（可选）"),
			),
		),
		k.handleGetPods,
	)

	// 获取 Deployment 信息
	s.AddTool(
		mcp.NewTool("k8s_get_deployments",
			mcp.WithDescription("获取 Deployment 信息"),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
			mcp.WithString("output_format",
				mcp.Description("输出格式（可选，默认为wide）"),
			),
		),
		k.handleGetDeployments,
	)

	// 获取 Service 信息
	s.AddTool(
		mcp.NewTool("k8s_get_services",
			mcp.WithDescription("获取 Service 信息"),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
			mcp.WithString("output_format",
				mcp.Description("输出格式（可选，默认为wide）"),
			),
		),
		k.handleGetServices,
	)

	// 获取 Pod 日志
	s.AddTool(
		mcp.NewTool("k8s_get_pod_logs",
			mcp.WithDescription("获取 Pod 日志"),
			mcp.WithString("pod_name",
				mcp.Required(),
				mcp.Description("Pod 名称"),
			),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
			mcp.WithString("container",
				mcp.Description("容器名称（可选，多容器时需要指定）"),
			),
			mcp.WithString("tail_lines",
				mcp.Description("显示最后几行日志（可选）"),
			),
			mcp.WithBoolean("follow",
				mcp.Description("是否跟踪日志（可选）"),
			),
		),
		k.handleGetPodLogs,
	)

	// 描述资源
	s.AddTool(
		mcp.NewTool("k8s_describe_resource",
			mcp.WithDescription("描述 Kubernetes 资源"),
			mcp.WithString("resource_type",
				mcp.Required(),
				mcp.Description("资源类型（如：pod, deployment, service等）"),
			),
			mcp.WithString("resource_name",
				mcp.Required(),
				mcp.Description("资源名称"),
			),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
		),
		k.handleDescribeResource,
	)

	// 扩缩容 Deployment
	s.AddTool(
		mcp.NewTool("k8s_scale_deployment",
			mcp.WithDescription("扩缩容 Deployment"),
			mcp.WithString("deployment_name",
				mcp.Required(),
				mcp.Description("Deployment 名称"),
			),
			mcp.WithNumber("replicas",
				mcp.Required(),
				mcp.Description("副本数量"),
			),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
		),
		k.handleScaleDeployment,
	)

	// 执行 kubectl 命令
	s.AddTool(
		mcp.NewTool("k8s_execute_kubectl",
			mcp.WithDescription("执行自定义 kubectl 命令"),
			mcp.WithString("command",
				mcp.Required(),
				mcp.Description("kubectl 命令参数（不包含kubectl本身）"),
			),
		),
		k.handleExecuteKubectl,
	)

	// 应用 YAML 配置
	s.AddTool(
		mcp.NewTool("k8s_apply_yaml",
			mcp.WithDescription("应用 YAML 配置"),
			mcp.WithString("yaml_content",
				mcp.Required(),
				mcp.Description("YAML 配置内容"),
			),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
		),
		k.handleApplyYAML,
	)

	// 删除资源
	s.AddTool(
		mcp.NewTool("k8s_delete_resource",
			mcp.WithDescription("删除 Kubernetes 资源"),
			mcp.WithString("resource_type",
				mcp.Required(),
				mcp.Description("资源类型（如：pod, deployment, service等）"),
			),
			mcp.WithString("resource_name",
				mcp.Required(),
				mcp.Description("资源名称"),
			),
			mcp.WithString("namespace",
				mcp.Description("命名空间（可选，默认为配置的默认命名空间）"),
			),
		),
		k.handleDeleteResource,
	)

	// 获取命名空间
	s.AddTool(
		mcp.NewTool("k8s_get_namespaces",
			mcp.WithDescription("获取所有命名空间"),
		),
		k.handleGetNamespaces,
	)
}
